C++11 auto 和 size_type
全部标签 来自cplusplus.com:Internally,anarraydoesnotkeepanydataotherthantheelementsitcontains(notevenitssize,whichisatemplateparameter,fixedoncompiletime).我理解这意味着使用array类似于在同一范围内使用int[]和sizeof。但是此代码是否有效或依赖于未定义的行为?classA{arrayarr;voidsetArr(){for(int&i:arr)i=42;}voidprintArr(){for(inti:arr)cout编译器如何知道何时停止fo
对于同一个程序,c++11返回212,但对于c++14,返回211给我。我很困惑..#include#includeusingnamespacestd;intmain(){chara[2];cout 最佳答案 charc[b.size()+1];在标准C++中是不允许的,任何版本。如果您发现一个编译器接受它,那么它就是一个编译器扩展,因此您应该查阅您使用的任何编译器的文档。 关于c++14vs11-sizeof返回不同的值?,我们在StackOverflow上找到一个类似的问题:
我有这段代码:intmyFunc(std::string&value){charbuffer[fileSize];....buffer[bytesRead]=NULL;value=buffer;return0;}行-buffer[bytes]=NULL给我一个警告:convertingtonon-pointertype'char'fromNULL。我如何摆脱这个警告? 最佳答案 不要使用NULL?它一般是为指针保留的,你没有指针,只有一个简单的char。只需使用\0(空终止符)或简单的0。
在可用的C++中,对许多变量使用auto是一种很好的做法,尤其是那些类型已知但输入起来很烦人的变量:weird_template_type::subtype::recursive_subtypesome_function(){//...}//...autoval=some_function();在有意义的情况下,对RAII对象使用显微镜也很好,例如用于锁定:some_setup_code();intval;{lock_guardlk(mut);val=read_shared_memory();}do_something(val);有没有办法混合这两个成语,例如当您的共享内存读取代码返回
由于size_t可以是32位或64位,具体取决于当前系统,是否最好始终将size_t作为引用或const引用传递给函数,以便它始终为4字节?(如果它是8字节,则必须复制一份)我看过的许多开源代码都不会这样做,但是如果他们的编译器支持64位整数,那么这些64位整数总是作为引用传递。他们为什么不为size_t这样做?我想知道你有什么看法。 最佳答案 通常按值传递所有原始类型,因为复制它们所需的操作通常只是一条汇编指令。因此,按值传递size_t优于按引用传递size_t。 关于c++-"Ef
我正在尝试用C++实现异构映射。我知道之前已经讨论过这个问题,但我想知道为什么不允许以下内容:mapmyMap;有什么方法可以让我在不借助(void*)指针的情况下简单地插入map?我在考虑最终能够做这样的事情:vectorv;myMap.insert(make_pair(1,12334));myMap.insert(make_pair)(2,v));这可能吗?还是我的努力是徒劳的?谢谢 最佳答案 auto并不意味着“这可以是任何类型”。它是一个特殊的关键字,只能用于声明变量,其含义是“这个变量的类型与用来初始化它的表达式的类型相同
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我试图理解auto在C++中是如何使用的。对我来说,理解某事的最好方法是看一个例子。然而,我看到的例子并不是那么简单。例如这里是“MeaningofC++0xautokeyword,byexample?”。要理解这个例子,我需要知道什么是"template"、“指针”、“malloc”等等。任何人都可以举一个使用auto的简单示例,以便人们可以轻松理解它的
我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一
在C++中,您可以编写如下所示的return语句:return(...);这与更流行的不同:return...;特别是第一个版本返回包含该return语句的函数堆栈的局部地址/引用。现在为什么有些东西想要返回对当时没有生命周期的东西的引用?这个成语的用例是什么?考虑到C++11和C++14的新流行语和特性,这有不同的用法吗? 最佳答案 形式为returnexpression;表达式可以是任何东西,包括带括号的表达式。这些不是不同的形式返回,但是,一起使用decltype(auto)将推导出不同的类型。
我知道这是一个有效的C++程序。函数声明中的throw有什么意义?据我所知,它什么都不做,也不用于任何事情。#includevoidfunc()throw(std::exception){}intmain(){return0;} 最佳答案 它指定任何std::exception都可以从func()中抛出,除此之外别无他法。如果抛出其他东西,它将调用一个unexpected()函数,该函数默认调用terminate()。这意味着抛出其他东西几乎肯定会以与未捕获异常相同的方式终止程序,但实现必须强制执行此操作。这通常与在func()周围